use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use utoipa::ToSchema;

use crate::data::Gender;

/// 用户表模型，包含敏感信息（如密码哈希）
///
/// **作者：** 张翔宇
/// **时间：** 2025年8月29日
#[derive(Debug, Serialize, Deserialize, FromRow, ToSchema)]
pub struct User {
    /// 用户ID
    pub id: i64,

    /// 用户名
    pub username: String,

    /// 密码哈希，序列化时跳过
    #[serde(skip_serializing)]
    pub password_hash: String,

    /// 头像
    pub avatar: Option<String>,

    /// 性别
    pub gender: Gender,

    /// 手机号
    pub phone: String,

    /// 邮箱
    pub email: String,

    /// 真实姓名
    pub nick_name: String,

    /// 是否激活
    pub is_active: bool,

    /// 创建人
    pub created_by: i64,

    /// 创建时间
    #[schema(value_type = String, format = DateTime)]
    pub created_at: DateTime<Utc>,

    /// 更新时间
    #[schema(value_type = String, format = DateTime)]
    pub updated_at: DateTime<Utc>
}